/*
* INSANE - Interactive Structural Analysis Environment
*
* Copyright (C) 2003-2005
* Universidade Federal de Minas Gerais
* Escola de Engenharia
* Departamento de Engenharia de Estruturas
* 
* Author's email :    insane@dees.ufmg.br
* Author's website :  http://www.dees.ufmg.br/insane
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package br.ufmg.dees.insane.ui.rich.prep.view.command;

import javax.swing.JFrame;
import javax.swing.JInternalFrame;

import br.ufmg.dees.insane.commons.command.Command;
import br.ufmg.dees.insane.ui.rich.prep.view.DesktopPrep;

/**
 * The class with the main method.
 * @author Ferreira, Reginaldo & Pitangueira, Roque
 * @since october 2006
 */

public class TileViewCommand implements Command {
    
    private DesktopPrep mainFrame;
	
//*****************************************************************************
	
    /**
     * Creates new NewViewCommand
     *
     * @see gui.command.AAAcommand#execute()
     * @param parent The JFrame parent.
     */
    public TileViewCommand(JFrame parent) {
        this.mainFrame = (DesktopPrep)parent;
    }
	
//*****************************************************************************
	
    /**
     * Closes the model and exits the system.
     */
    
    public void execute() {
    	   JInternalFrame intFrames[] = mainFrame.getDesktop().getAllFrames();
    	   
    	   int h1, h2, h3, h4, h5, w, h;
    	   h1 = mainFrame.getHeight();
    	   h2 = mainFrame.getDesktopMenuBar().getHeight();
    	   h3 = mainFrame.getDesktopStatusBar().getHeight();
    	   h4 = mainFrame.getDesktopToolPanel().getHeight();
    	   h5 = 32;
    	   
    	   w = mainFrame.getWidth(); 
    	   h = (h1 - (h2 + h3 + h4 + h5)) / 2;
    	   
    	   if (intFrames.length == 2)
    	   {
    		   intFrames[1].reshape(0,      0,  w/2, 2*h);
    		   intFrames[0].reshape(0+w/2,  0,  w/2, 2*h);
    	   }
    	   else if (intFrames.length == 3)
    	   {
        	   intFrames[2].reshape(0,       0,     w/2, h);
        	   intFrames[1].reshape(0+w/2,   0,     w/2, 2*h);
        	   intFrames[0].reshape(0,       0+h,   w/2, h);    		   
    	   }
    	   else if (intFrames.length == 4) // 4 views
    	   {
        	   intFrames[3].reshape(0,       0,     w/2, h);
        	   intFrames[2].reshape(0+w/2,   0,     w/2, h);
        	   intFrames[1].reshape(0,       0+h,   w/2, h);
        	   intFrames[0].reshape(0+w/2,   0+h,   w/2, h);       		   
    	   }
    	   else if (intFrames.length == 5) // 5 views
    	   {
        	   intFrames[4].reshape(0,       0,        w/3, 2*h);
        	   intFrames[3].reshape(0+w/3,     0,      w/3, h);
        	   intFrames[2].reshape(0+2*w/3,   0,      w/3, h);
        	   intFrames[1].reshape(0+w/3,     0+h,    w/3, h);
        	   intFrames[0].reshape(0+2*w/3,   0+h,    w/3, h);       		   
    	   }
    	   else  if (intFrames.length == 6) // 6 views
    	   {
        	   intFrames[5].reshape(0,         0,      w/3, h);
        	   intFrames[4].reshape(0+w/3,     0,      w/3, h);
        	   intFrames[3].reshape(0+2*w/3,   0,      w/3, h);
        	   intFrames[2].reshape(0,         0+h,    w/3, h);
        	   intFrames[1].reshape(0+w/3,     0+h,    w/3, h);
        	   intFrames[0].reshape(0+2*w/3,   0+h,    w/3, h);       		   
    	   }   
    	   else
    	   {
    		   mainFrame.getDesktopTextArea().addText("Tile command is possible only for 2 or 6 views.");
    	   }
    	   mainFrame.getDesktopTextArea().addText("Views in a tile form.");
     }
	
//*****************************************************************************
	
    /**
     * Impossible to undo - Not implemented.
     */
    public void undo() {
    }
	
//*****************************************************************************
	
    /**
     * Impossible to redo - Not implemented.
     */
    public void redo() {
    }
    
//*****************************************************************************
}

